home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / SAT 2.3.8 / Demos / SAT Invaders demo ƒ / sEnemy.p < prev    next >
Text File  |  1996-05-23  |  2KB  |  93 lines

  1. {===============================================}
  2. {================= Enemy sprite unit ================}
  3. {===============================================}
  4.  
  5. { Example file for Ingemars Sprite Animation Toolkit. }
  6. { © Ingemar Ragnemalm 1992 }
  7. { See doc files for legal terms for using this code. }
  8.  
  9. unit sEnemy;
  10.  
  11. { Sprite unit. A sprite unit should include the following routines:}
  12. { Init-procedure, that initializes private bitmaps}
  13. { Setup-procedure, that sets variables other than the standard ones set by MakeSprite }
  14. { Handle-procedure, to be called once per iteration until the sprite dies }
  15. { Hittask-procedure (optional), for advanced collission handling. }
  16.  
  17. { Enemy object for the SATInvaders sample game. }
  18.  
  19. interface
  20.  
  21.     uses
  22. {$IFC UNDEFINED THINK_PASCAL}
  23.         Types, QuickDraw, {}
  24. {$ENDC}
  25.         SAT, SoundConst, GameGlobals, sMissile;
  26.  
  27.     var
  28.         globalspeed: Point;
  29.         turnFlag: boolean;
  30.         lasth, downcount: integer;
  31.  
  32.     procedure InitEnemy;
  33.     procedure SetupEnemy (sp: SpritePtr);
  34.     procedure HandleEnemy (me: SpritePtr);
  35.  
  36. implementation
  37.  
  38.     var
  39.         enemyFace: array[1..6] of FacePtr;
  40.  
  41.     procedure InitEnemy;
  42.         var
  43.             ii: integer;
  44.     begin
  45.         for ii := 1 to 6 do
  46.             enemyFace[ii] := SATGetFace(127 + ii);
  47.     end;
  48.  
  49.     procedure SetupEnemy (sp: SpritePtr);
  50.     begin
  51.         sp^.face := enemyFace[1];
  52.         sp^.mode := SATRand(6) + 1; { icon number }
  53.         SetRect(sp^.hotRect, 2, 4, 30, 32);
  54. { Since enemies are only created at the beginning of each level, we re-initialize this stuff here:}
  55.         turnFlag := true; {start by going downwards}
  56.         globalspeed.h := 0;
  57.         globalspeed.v := 3;
  58.         lasth := -5;
  59.         downcount := (((level div 2) + 1) * 40) div 3; {How far down should we go when we come in?}
  60.         sp^.task := @HandleEnemy;
  61.     end;
  62.  
  63.     procedure HandleEnemy (me: SpritePtr);
  64.         var
  65.             missile: Spriteptr;
  66.     begin
  67.         if me^.kind <> -3 then
  68.             begin
  69.                 me^.task := nil;
  70.                 SATSoundPlay(dunkH, 1, false);
  71.             end;
  72.  
  73.         me^.mode := me^.mode + 1;
  74.         if me^.mode = 7 then
  75.             me^.mode := 1;
  76.         me^.face := enemyFace[me^.mode];
  77.  
  78.         me^.position.h := me^.position.h + globalspeed.h;
  79.         me^.position.v := me^.position.v + globalspeed.v;
  80.  
  81.         if (me^.position.h < 0) or (me^.position.h > gSAT.offSizeH - 32) then
  82.             turnflag := true;
  83.         if me^.position.v > gSAT.offSizeV then
  84.             me^.task := nil;
  85.  
  86.         if SATRand100 < 2 then
  87.             begin
  88.                 missile := SATNewSprite(-1, me^.position.h + 8, me^.position.v + 20, @SetupMissile);
  89.                 SATSoundPlay(piuH, 1, false);
  90.             end;
  91.     end;
  92.  
  93. end.